/**
 * 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。
 * 判断该树中是否存在 根节点到叶子节点 的路径，这条路径上所有节点值相加等于目标和 targetSum 。如果存在，返回 true ;
 * 否则，返回 false 。
 * 叶子节点 是指没有子节点的节点。
 */
  class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
 }

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        //如果当前节点为空,则不存在
        if(root == null){
            return false;
        }
        /*左右节点均为空说明这个节点是叶子节点,
         *然后判断叶子节点的值与targetsum的值是否相等,
         *这个targetsum是减去了之前的节点的值
         */

        if(root.left == null && root.right == null){
            return targetSum == root.val;
        }
        //左右子树中只要存在一条路径的总和为target就行哈
        return hasPathSum(root.left,targetSum - root.val)
                || hasPathSum(root.right,targetSum - root.val);
    }
}